package com.aftersale.demo.utils;

/**
 * @author 空
 * @date 2023/10/28 15:32
 * @desc
 */

import com.aftersale.demo.entity.Result;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;

/**
*@author  空
*@date    2023/10/28 17:53
*@desc    处理接口校验异常信息并返回给前端
*/
@ControllerAdvice
public class MyException {

    /**
     * 捕获参数异常
     *
     * @param exception MethodArgumentNotValidException
     * @return Result
     */
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    @ResponseBody
    public Result argumentException(MethodArgumentNotValidException exception) {
        String msg = "";
        //查看MethodArgumentNotValidException类可以发现,异常的信息在BindingResult下List<ObjectError>中
        //我这里取第一条的信息进行展示,可根据实际项目情况自行修改
        //getDefaultMessage()获取的信息就是我们RequestVerificationCode中的message部分
        if (exception.getBindingResult() != null
                && exception.getBindingResult().getAllErrors() != null
                && exception.getBindingResult().getAllErrors().size() > 0) {
            msg = exception.getBindingResult().getAllErrors().get(0).getDefaultMessage();
        }
        //自定义的返回类,可根据实际项目情况自行修改
        return Result.error("401",msg);
    }

    @ExceptionHandler(value = BindException.class)
    @ResponseBody
    public Result argumentException(BindException exception) {

        //自定义的返回类,可根据实际项目情况自行修改
        return Result.error("401","解决方法过长，请以文档的方式上传");
    }

    @ExceptionHandler(value = MethodArgumentTypeMismatchException.class)
    @ResponseBody
    public Result argumentException(MethodArgumentTypeMismatchException exception) {

        //自定义的返回类,可根据实际项目情况自行修改
        return Result.error("401","字段必须为整数");
    }
    @ExceptionHandler(value = MissingServletRequestParameterException.class)
    @ResponseBody
    public Result parameterException(MissingServletRequestParameterException exception) {

        //自定义的返回类,可根据实际项目情况自行修改
        return Result.error("400","请求参数不正确");
    }

}


